import {fileURLToPath, URL} from 'node:url'

import {defineConfig, loadEnv} from 'vite'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import {ElementPlusResolver} from 'unplugin-vue-components/resolvers'
import * as path from "node:path";

// https://vitejs.dev/config/
export default defineConfig(({command, mode}) => {
    const ENV_DIR = path.resolve(__dirname, "./env")
    // 启动时根据 command 和 mode 加载 env 内容，全局生效
    const env = loadEnv(mode, ENV_DIR, "")
    const isServe = command === "serve";
    const isBuild = command === "build";
    // 启动时打印 key 的内容
    console.log("当前环境变量VITE_ENV_URL:" + env.VITE_ENV_URL)
    console.log("当前环境变量VITE_APP_SERVER_URL:" + env.VITE_APP_SERVER_URL)
    return {
        base: '/',
        envDir: ENV_DIR,
        plugins: [
            vue(),
            AutoImport({
                resolvers: [ElementPlusResolver()],
                // 配置auto-imports.d.ts文件生成路径
                dts: path.resolve(__dirname, "other/auto-imports.d.ts")
            }),
            Components({
                resolvers: [ElementPlusResolver()],
                // 配置components.d.ts文件生成路径
                dts: path.resolve(__dirname, "other/components.d.ts")
            }),
        ],
        resolve: {
            alias: {
                '@': fileURLToPath(new URL('./src', import.meta.url))
            }
        },
        server: {
            host: env.VITE_APP_HOST,// 指定服务器应该监听哪个 IP 地址
            port: Number.parseInt(env.VITE_APP_PORT),// 指定开发服务器端口
            proxy: {
                '/dev': {
                    target: env.VITE_APP_SERVER_URL,
                    changeOrigin: true, // 表示开启代理, 允许跨域请求数据
                    secure: false,  // 如果是https接口，需要配置这个参数
                    rewrite: (path) => path.replace(/^\/dev/, ''),
                }
            }
        },
        build: {
            outDir: '../src/main/resources/ui/static', // 生成输出的根目录。如果该目录存在，则会在生成之前将其删除。 默认文件夹名称为dist
            target: 'esnext',
            terserOptions: {
                compress: {
                    drop_console: true, // 生产环境去掉控制台 console
                    drop_debugger: true, // 生产环境去掉控制台 debugger 默认就是true
                    dead_code: true, // 删除无法访问的代码 默认就是true
                }
            },
            chunkSizeWarningLimit: 2000, // 调整区块大小警告限制
        },
    }


})
